package cn.gs.aspect;

import org.aspectj.lang.ProceedingJoinPoint;


public class LogAspect {


    // 环绕通知：可控制方法执行流程
    public Object  doAround(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("==================================");
        System.out.println("环绕通知：进入方法");
        Object o = joinPoint.proceed();
        System.out.println("环绕通知：退出方法");
        return o;
    }

    // 前置通知：方法执行前触发
    public void doBefore() {

        System.out.println("===============前置通知============");
    }

    // 后置通知：方法正常返回后触发（可获取返回值）
    public void doAfterReturning(String result) {
        System.out.println("===============后置通知============");
        System.out.println("========返回值=====："+result);
    }

    // 异常通知：方法抛出异常时触发
    public void doAfterThrowing(Exception e) {
        System.out.println("===============异常通知============");
        System.out.println("========异常=====："+e.getMessage());
    }

    // 最终通知：类似finally块，总会执行
    public void doAfter() {
        System.out.println("===============最终通知============");
    }
}
